package net.suncaper.mvc.service.impl;

import net.suncaper.mvc.mapper.RoleMapper;
import net.suncaper.mvc.mapper.impl.RoleMapperImpl;
import net.suncaper.mvc.model.domain.Role;
import net.suncaper.mvc.model.domain.RolePermission;
import net.suncaper.mvc.model.domain.UserRole;
import net.suncaper.mvc.service.IRoleService;

import java.util.List;

/**
 * 角色服务实现类
 */
public class RoleServiceImpl implements IRoleService {

    private final RoleMapper roleMapper = new RoleMapperImpl();

    /**
     * 创建角色
     *
     * @param role 角色信息
     * @return 创建结果
     */
    @Override
    public boolean createRole(Role role) {
        return roleMapper.insertRole(role);
    }

    /**
     * 根据ID获取角色信息
     *
     * @param roleId 角色ID
     * @return 角色信息
     */
    @Override
    public Role getRoleById(Integer roleId) {
        return roleMapper.selectRoleById(roleId);
    }

    /**
     * 根据名称获取角色信息
     *
     * @param roleName 角色名称
     * @return 角色信息
     */
    @Override
    public Role getRoleByName(String roleName) {
        return roleMapper.selectRoleByName(roleName);
    }

    /**
     * 获取所有角色列表
     *
     * @return 角色列表
     */
    @Override
    public List<Role> getAllRoles() {
        return roleMapper.selectAllRoles();
    }

    /**
     * 更新角色信息
     *
     * @param role 角色信息
     * @return 更新结果
     */
    @Override
    public boolean updateRole(Role role) {
        return roleMapper.updateRole(role);
    }

    /**
     * 删除角色
     *
     * @param roleId 角色ID
     * @return 删除结果
     */
    @Override
    public boolean deleteRole(Integer roleId) {
        return roleMapper.deleteRole(roleId);
    }

    /**
     * 为角色分配权限
     *
     * @param roleId 角色ID
     * @param permissionId 权限ID
     * @return 分配结果
     */
    @Override
    public boolean assignPermissionToRole(Integer roleId, Integer permissionId) {
        RolePermission rolePermission = new RolePermission(roleId, permissionId);
        return roleMapper.assignPermissionToRole(rolePermission);
    }

    /**
     * 为用户分配角色
     *
     * @param userId 用户ID
     * @param roleId 角色ID
     * @param hotelName 酒店名称（酒店商家角色需要）
     * @return 分配结果
     */
    @Override
    public boolean assignRoleToUser(String userId, Integer roleId, String hotelName) {
        UserRole userRole = new UserRole(userId, roleId, hotelName);
        return roleMapper.assignRoleToUser(userRole);
    }

    /**
     * 获取用户的角色列表
     *
     * @param userId 用户ID
     * @return 角色列表
     */
    @Override
    public List<Role> getUserRoles(String userId) {
        return roleMapper.selectRolesByUserId(userId);
    }

    /**
     * 移除用户的角色
     *
     * @param userId 用户ID
     * @param roleId 角色ID
     * @return 移除结果
     */
    @Override
    public boolean removeRoleFromUser(String userId, Integer roleId) {
        return roleMapper.removeRoleFromUser(userId, roleId);
    }

    /**
     * 移除角色的权限
     *
     * @param roleId 角色ID
     * @param permissionId 权限ID
     * @return 移除结果
     */
    @Override
    public boolean removePermissionFromRole(Integer roleId, Integer permissionId) {
        return roleMapper.removePermissionFromRole(roleId, permissionId);
    }

    /**
     * 检查用户是否具有指定角色
     *
     * @param userId 用户ID
     * @param roleName 角色名称
     * @return 用户是否具有指定角色
     */
    @Override
    public boolean hasRole(String userId, String roleName) {
        List<Role> roles = getUserRoles(userId);
        if (roles == null || roles.isEmpty()) {
            return false;
        }
        
        for (Role role : roles) {
            if (roleName.equals(role.getRoleName())) {
                return true;
            }
        }
        
        return false;
    }
} 